package com.info33.platform.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.info33.platform.common.mvc.vo.Result;
import com.info33.platform.system.dto.SysTenantMenuDTO;
import com.info33.platform.system.entity.SysTenantMenu;
import com.info33.platform.system.vo.SysMenuListVO;
import com.info33.platform.system.vo.SysTenantMenuDetailVO;
import com.info33.platform.system.vo.SysTenantMenuVO;
import com.info33.platform.system.vo.SysUserVO;

import java.util.List;

/**
 * @author admin
 */
public interface SysTenantMenuService extends IService<SysTenantMenu> {


    /**
     * 分页获取菜单列表
     *
     * @param tenantId 租户id
     * @param pid      父id
     * @param pageNum
     * @param pageSize
     * @return
     */
    SysMenuListVO pageMenuList(Long tenantId, Long pid, int pageNum, int pageSize);

    /**
     * 获取菜单树
     *
     * @param currentUser 当前用户
     * @return -
     */
    List<SysTenantMenuVO> pcMenuTree(SysUserVO currentUser);

    /**
     * 获取菜单详情
     *
     * @param id sys_tenant_menu id
     * @return
     */
    SysTenantMenuDetailVO getMenuDetail(Long id);

    /**
     * 添加菜单信息
     *
     * @param tenantId         租户id
     * @param sysTenantMenuDTO 菜单信息
     * @return
     */
    Result<?> saveMenu(Long tenantId, SysTenantMenuDTO sysTenantMenuDTO);

    /**
     * 更新菜单信息
     *
     * @param tenantId      租户id
     * @param sysTenantMenu 菜单信息
     * @return
     */
    Result<?> updateMenu(Long tenantId, SysTenantMenu sysTenantMenu);

    /**
     * 删除菜单信息
     *
     * @param tenantId 租户id
     * @param ids      菜单id集合
     * @return
     */
    Result<?> removeMenu(Long tenantId, List<Long> ids);

    /**
     * 获取所有菜单树结构
     *
     * @param sysUserTenantId
     * @return
     */
    List<SysTenantMenuVO> getAllMenuTree(Long sysUserTenantId);

    /**
     * 获取包含此菜单的菜单树
     *
     * @param id
     * @param sysCurrentUser
     * @return
     */
    SysTenantMenuVO getMenutreeById(Long id, SysUserVO sysCurrentUser);

    /**
     * 获取当前登录人按钮权限
     *
     * @param action
     * @param currentUser
     * @return
     */
    List<SysTenantMenuVO> getButtonMenuList(String action, SysUserVO currentUser);

    /**
     * pc 与人员绑定的菜单树
     *
     * @param dto         入参
     * @param currentUser 当前用户
     * @return vo
     */
    List<SysTenantMenuVO> treeByUser(SysTenantMenuDTO dto, SysUserVO currentUser);
}